glitter makes SPARQL

glitter, un package R pour explorer et collecter des données du web sémantique

Lise Vaudor

21/10/2021

Histoire du projet

Projet: mon métier

Projet: Les données (participatives) du web

Projet: RECIT

Projet émergent ENS RECIT

=> R pour l’Exploration et la Collecte IntĂ©grĂ©e de Triplets de donnĂ©es

Projet: Cas d’études

Recrutement de Camille Scheffler (stage M2) et exploration des Wikidata pour deux cas d’études:

Projet: Package glitter

En lien (et en parallĂšle) aux cas d’études de Camille, dĂ©veloppement du package R glitter.

🎯 Objectifs:

Promouvoir l’usage (exploration, recueil, analyse) des LOD pour les chercheurs et Ă©tudiants usagers de R, en:

Projet: quelques rappels sur les LOD/ web des données

© Camille Scheffler

Projet: quelques rappels sur les LOD/ web des données

© Camille Scheffler

Projet: DifficultĂ©s d’appropriation des LOD

Projet: Difficultés de collecte

Importance des exemples de requĂȘtes SPARQL pour explorer les bases de donnĂ©es

Or, le langage SPARQL est spécifique à

  • cette Ă©tape (dans l’analyse) du recueil de donnĂ©es
  • ce type de donnĂ©es (les Linked Open Data)

Projet: avancement

Un petit projet 
 (projet Ă©mergent ENS, 20 000 euros sur 3 ans). 🐈

Un package en cours de développement => amélioration à prévoir début 2022.

Package installable et modifiable ici.

Entrée par les Wikidata

Wikidata: exploration cĂŽtĂ© “documentaire”

🔗Lien

Wikidata: exploration cĂŽtĂ© “donnĂ©es”

Passage par le Wikidata Query Service (WDQS)

🔗Lien

Wikidata: focus sur le SPARQL endpoint (depuis le navigateur)

SELECT ?film ?filmLabel 
WHERE {
  ?film wdt:P31 wd:Q11424.
  SERVICE wikibase:label {
    bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". 
  } 
}
LIMIT 10

Wikidata: focus sur le code depuis R

query='SELECT ?film ?filmLabel 
WHERE {
  ?film wdt:P31 wd:Q11424.
  SERVICE wikibase:label {
    bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en".
  }
}'

result=purrr::quietly(WikidataQueryServiceR::query_wikidata)(query)
tib=result$r

🎯 Chaüne de traitement reproductible

Wikidata: focus sur le code depuis R, avec glitter

tib=spq_init() %>% 
  spq_add("?film wdt:P31 wd:Q11424", label="?film") %>% 
  spq_head(n=10) %>% 
  send()
film filmLabel
http://www.wikidata.org/entity/Q372 We Live in Public
http://www.wikidata.org/entity/Q593 A Gang Story
http://www.wikidata.org/entity/Q595 The Intouchables
http://www.wikidata.org/entity/Q1365 Swept Away
http://www.wikidata.org/entity/Q2201 Kick-Ass
http://www.wikidata.org/entity/Q2345 12 Angry Men

Wikidata: avant-aprĂšs glitter

Avant:

query='SELECT ?film ?filmLabel WHERE {
  ?film wdt:P31 wd:Q11424.
  SERVICE wikibase:label {
    bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en".
  }
}
LIMIT 10'
result=WikidataQueryServiceR::query_wikidata(query)
tib=result$r

AprĂšs:

tib=spq_init() %>% 
  spq_add("?film wdt:P31wd:Q11424", label="?film") %>% 
  spq_head(n=10) %>% 
  send()

Exemple de requĂȘte et valorisation: lieux de fiction

Ex. lieux de fiction: que veut-on faire?

🔗Lien

Ex. lieux de fiction: on peut récupérer les données

tib=spq_init() %>%                                       # Initialise requĂȘte puis
  spq_add("?film wdt:P31 wd:Q11424", label="?film") %>%  # Ajoute triplet "?film est une instance de film" puis
  spq_add("?film wdt:P840 ?loc", label="?loc") %>%       # Ajoute triplet "?film a pour localisation narrative ?loc (à étiqueter) puis
  spq_language("en,fr") %>%                              # Affiche les étiquettes en anglais, ou à défaut en français puis
  spq_head(n=10) %>%                                     # Sélectionne les 10 premiers résultats puis
  send()                                                 # Envoie la requĂȘte
show(tib)
film filmLabel loc locLabel
http://www.wikidata.org/entity/Q2783956 Tarzan the Tiger http://www.wikidata.org/entity/Q15 Africa
http://www.wikidata.org/entity/Q2824081 Adanggaman http://www.wikidata.org/entity/Q15 Africa
http://www.wikidata.org/entity/Q2826159 Africa a.F.r.I.c.A http://www.wikidata.org/entity/Q15 Africa
http://www.wikidata.org/entity/Q2826193 Afrique, la parole essentielle http://www.wikidata.org/entity/Q15 Africa
http://www.wikidata.org/entity/Q2826228 Africa, How Are You With Pain? http://www.wikidata.org/entity/Q15 Africa
http://www.wikidata.org/entity/Q2891602 Batouk http://www.wikidata.org/entity/Q15 Africa
http://www.wikidata.org/entity/Q2904612 Rosolino PaternĂČ http://www.wikidata.org/entity/Q15 Africa
http://www.wikidata.org/entity/Q2937646 Captain Phillips http://www.wikidata.org/entity/Q15 Africa
http://www.wikidata.org/entity/Q2948643 Champagne safari http://www.wikidata.org/entity/Q15 Africa
http://www.wikidata.org/entity/Q3002671 Running Free http://www.wikidata.org/entity/Q15 Africa

Ex. lieux de fiction: pas trop de données?

Combien de films ont la localisation narrative renseignée dans Wikidata?

 tib=spq_init() %>%                                       # Initialise requĂȘte puis
  spq_add("?film wdt:P31 wd:Q11424", label="?film") %>%   # Ajoute triplet "?film est une instance de film" puis
  spq_add("?film wdt:P840 ?loc", label="?loc") %>%        # Ajoute triplet "?film a pour localisation narrative ?loc (à étiqueter) puis
  spq_summarise(c("?n_films"="COUNT(?film)")) %>%         # Résume en comptant le nombre de films puis
  send()                                                  # Montre la table
show(tib)
n_films
46879

Ex. lieux de fiction : on va restreindre un peu (géographiquement) 


lf_1=spq_init() %>%                                         # Initialise requĂȘte puis
  spq_add("?film wdt:P31 wd:Q11424", label="?film") %>%     # Ajoute triplet "?film est une instance de film" puis
  spq_add("?film wdt:P840 ?loc", label="?loc") %>%          # Ajoute triplet "?film a pour localisation narrative ?loc (à étiqueter) puis
  spq_add("?loc wdt:P625 ?coords",                          # Ajoute triplet "?loc a pour coordonnées spatiales ?coords" 
          within_box=list(southwest=c(3,43),                #         ... restreins pour que les coordonnées soient comprises
                          northeast=c(7,47))) %>%           #         ... dans un cadre défini par ces deux points (S-O et N-E) puis
  spq_language("fr") %>%                                    # Etiquette de préférence en français puis    
  send()                                                    # Envoie la requĂȘte

Cette table comprend 317 lignes. Voici les premiĂšres:

show(lf_1 %>% head())
film filmLabel loc locLabel coords
http://www.wikidata.org/entity/Q86427 À bout de souffle http://www.wikidata.org/entity/Q23482 Marseille Point(5.376388888 43.296666666)
http://www.wikidata.org/entity/Q105624 La Mémoire dans la peau http://www.wikidata.org/entity/Q23482 Marseille Point(5.376388888 43.296666666)
http://www.wikidata.org/entity/Q151711 Marie-Jo et ses deux amours http://www.wikidata.org/entity/Q23482 Marseille Point(5.376388888 43.296666666)
http://www.wikidata.org/entity/Q190588 Love Actually http://www.wikidata.org/entity/Q23482 Marseille Point(5.376388888 43.296666666)
http://www.wikidata.org/entity/Q208108 ArrĂȘte-moi si tu peux http://www.wikidata.org/entity/Q23482 Marseille Point(5.376388888 43.296666666)
http://www.wikidata.org/entity/Q215319 L’Immortel http://www.wikidata.org/entity/Q23482 Marseille Point(5.376388888 43.296666666)

Ex. lieux de fiction: et on enrichit!

lf_2=spq_init() %>%                                       # Initialise requĂȘte puis
  spq_add("?film wdt:P31 wd:Q11424", label="?film") %>%   # Ajoute triplet "?film est une instance de film" puis
  spq_add("?film wdt:P840 ?loc", label="?loc") %>%        # Ajoute triplet "?film a pour localisation narrative ?loc (à étiqueter) puis
  spq_add("?loc wdt:P625 ?coords",                        # Ajoute triplet "?loc a pour coordonnées spatiales ?coords"
          within_box=list(southwest=c(3,43),              #           ... restreins pour que les coordonnées soient comprises
                          northeast=c(7,47)))%>%          #           ... dans un cadre défini par ces deux points (S-O et N-E) puis
  spq_add("?film wdt:P18 ?image", required=FALSE) %>%     # Ajoute triplet "?film a pour image d'illustration ?image" puis
  spq_add("?film wdt:P921 ?subject",                      # Ajoute triplet "?film a pour sujet ?subject" (info optionnelle)
          label="?subject", required=FALSE) %>%           #           ... étiquette ?subject puis
  spq_add("?film wdt:P577 ?date") %>%                     # Ajoute triplet "?film a été publié à la date ?date puis
  spq_mutate(c("?year"="year(?date)")) %>%                # Ajoute une variable ?year qui corresond à l'année de ?date puis
  spq_language("fr,en") %>%                               # Etiquette (de préférence en français, à défaut en anglais) puis
  send()                                                  # Envoie la requĂȘte

Cette table comprend 594 lignes. Voici les premiĂšres:

lf_2 %>% 
   select(-date) %>% 
   unique() %>% 
   head() %>% 
   show()
film filmLabel loc locLabel coords image subject subjectLabel year
http://www.wikidata.org/entity/Q86427 À bout de souffle http://www.wikidata.org/entity/Q23482 Marseille Point(5.376388888 43.296666666) NA http://www.wikidata.org/entity/Q316 amour 1960
http://www.wikidata.org/entity/Q86427 À bout de souffle http://www.wikidata.org/entity/Q23482 Marseille Point(5.376388888 43.296666666) NA http://www.wikidata.org/entity/Q2979 libertĂ© 1960
http://www.wikidata.org/entity/Q86427 À bout de souffle http://www.wikidata.org/entity/Q23482 Marseille Point(5.376388888 43.296666666) NA http://www.wikidata.org/entity/Q9476 libre arbitre 1960
http://www.wikidata.org/entity/Q86427 À bout de souffle http://www.wikidata.org/entity/Q23482 Marseille Point(5.376388888 43.296666666) NA http://www.wikidata.org/entity/Q214339 rîle social 1960
http://www.wikidata.org/entity/Q86427 À bout de souffle http://www.wikidata.org/entity/Q23482 Marseille Point(5.376388888 43.296666666) NA http://www.wikidata.org/entity/Q1124515 condition humaine 1960
http://www.wikidata.org/entity/Q86427 À bout de souffle http://www.wikidata.org/entity/Q23482 Marseille Point(5.376388888 43.296666666) NA http://www.wikidata.org/entity/Q20820180 outsider 1960

Ex. lieux de fiction: requĂȘte SPARQL

## 
## SELECT ?film ?filmLabel ?loc ?locLabel ?coords ?image ?subject ?subjectLabel ?date (year(?date) AS ?year)
## WHERE{
## 
## ?film wdt:P31 wd:Q11424.
## ?film wdt:P840 ?loc.
## SERVICE wikibase:box {
## ?loc wdt:P625 ?coords.
## bd:serviceParam wikibase:cornerSouthWest 'Point(3 43)'^^geo:wktLiteral.
## bd:serviceParam wikibase:cornerNorthEast 'Point(7 47)'^^geo:wktLiteral.
## }
## OPTIONAL {?film wdt:P18 ?image.}
## OPTIONAL {?film wdt:P921 ?subject.}
## ?film wdt:P577 ?date.
## 
## SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en".}
## }

Ex. lieux de fiction: nettoyage sous R

lf_c=lf_2 %>%                                                 # ConsidĂšre lf_2 puis
  select(film,ends_with("Label"),coords,image,year) %>%       # Sélectionne ces variables (dont "....Label") puis
  group_by(film,coords,image,locLabel,filmLabel) %>%          # Groupe par ces variables puis 
  summarise(subjectLabel=stringr::str_c(unique(subjectLabel), # Résume par groupe: le sujet (sur une seule ligne)   
                                        collapse=", "),       #     ... en séparant les éléments par ", "
            year=min(year),                                   #     ... et l'année comme minimum des années de sortie   
            .groups="drop")                                   # Dégroupe

Cette table comprend 315 lignes. Voici les premiĂšres:

show(head(lf_c))
film coords image locLabel filmLabel subjectLabel year
http://www.wikidata.org/entity/Q100276888 Point(6.5 44.8) NA Alpes françaises Slalom sport de compétition, sports industry 2020
http://www.wikidata.org/entity/Q1033136 Point(5.376388888 43.296666666) http://commons.wikimedia.org/wiki/Special:FilePath/Elka%C3%AFm%20Donzelli%20Cabourg%202011.jpg Marseille La guerre est déclarée cancer 2011
http://www.wikidata.org/entity/Q105624 Point(3.156666666 46.9925) NA Nevers La Mémoire dans la peau amnésie 2002
http://www.wikidata.org/entity/Q105624 Point(5.376388888 43.296666666) NA Marseille La Mémoire dans la peau amnésie 2002
http://www.wikidata.org/entity/Q1061541 Point(5.376388888 43.296666666) NA Marseille Un prophÚte crime organisé 2009
http://www.wikidata.org/entity/Q1062358 Point(3.086944444 45.779722222) NA Clermont-Ferrand Quand j’étais chanteur vieillissement, industrie du spectacle, relation amoureuse, Ăąge moyen, falling in love, human bonding, chansonnier, end of career 2006

Ex. lieux de fiction: préparation des données pour carto

💬 PrĂ©paration d’une fenĂȘtre “pop-up” (langage html) pour affichage d’infos dans la carte

lf_m =lf_c %>% 
  transform_wikidata_coords("coords") %>% 
  mutate(popup=glue::glue("<h1>{filmLabel}<a href={film} target='_blank'>🔗</a></h1>
                           <li>Lieu: {locLabel}</li>
                           <li>Année de sortie: {year}</li>")) %>% 
  mutate(popup=case_when(is.na(image)~popup,
                         !is.na(image)~glue::glue("{popup}
                                                  <img src='{image}' height='200'>"))) %>% 
  mutate(popup=case_when(is.na(subjectLabel)~popup,
                         !is.na(subjectLabel)~glue::glue("{popup}
                                                         <li>ThĂšmes: {subjectLabel}</li>")))

Ex. lieux de fiction: production d’une carte

🌍 Production d’une carte leaflet (carte interactive dans un doc. html).

library(leaflet)
# Définition d'une échelle colorée
# (en fonction de date de sortie)
pal <- colorNumeric(c("red", "green", "blue"),        
                    c(1895,1950,1970,1990,2010,2021))
# Création de la carte
map=leaflet(lf_m) %>% # déf carte
  addTiles() %>%      # ajout fond de carte
  addCircleMarkers(col=~pal(year),
                   ~lng, ~lat,
                   popup = ~popup,
                   clusterOptions = markerClusterOptions())
map

Exploration des fonctionnalités de glitter

Package glitter: vue d’ensemble

Un package qui suit quelques principes du tidyverse


Package glitter: fonctions principales

Fonctions de base:

  • spq_init() pour initier une requĂȘte
  • spq_add() pour rajouter un triplet
  • send() pour envoyer la requĂȘte

Fonctions notamment inspirées de dplyr (pour la manipulation de données)

  • spq_filter()
  • spq_select()
  • spq_arrange()
  • spq_mutate()
  • spq_group_by()
  • spq_summarise()

Package glitter: spq_filter()

FILTRER les résultats renvoyés

Articles avec “wikidata” dans le titre (en anglais):

spq_init() %>%
  spq_add("?item wdt:P31 wd:Q13442814") %>%                  # ?item est une instance d'article scientifique
  spq_add("?item rdfs:label ?itemTitle") %>%                 # ?item a pour titre ?itemTitle
  spq_filter("contains(lcase(?itemTitle),'wikidata')") %>%   # <= ce titre contient (en minuscules) "wikidata"
  spq_filter("lang(?itemTitle)='en'") %>%                    # <= on filtre pour ne garder que les titres en anglais
  spq_head(n=5) %>%
  send() %>% 
  show()
item itemTitle
http://www.wikidata.org/entity/Q18507561 Wikidata: A Free Collaborative Knowledgebase
http://www.wikidata.org/entity/Q21503276 Utilizing the Wikidata system to improve the quality of medical content in Wikipedia in diverse languages: a pilot study
http://www.wikidata.org/entity/Q21503284 Wikidata: A platform for data integration and dissemination for the life sciences and beyond
http://www.wikidata.org/entity/Q23712646 Wikidata as a semantic framework for the Gene Wiki initiative
http://www.wikidata.org/entity/Q24074986 From Freebase to Wikidata: The Great Migration

Package glitter: spq_mutate()

MODIFIER les résultats renvoyés.

Données sur films, date de sortie ET année de sortie

spq_init() %>%
 spq_add("?film wdt:P31 wd:Q11424", label="?film") %>%   # ?film est un instance de film
 spq_add("?film wdt:P577 ?date") %>%                     # ?film est sorti Ă  la date ?date
 spq_mutate(c("?year"="year(?date)")) %>%                # <= ajoute variable ?year correspondant à l'année de la date
 spq_head(5) %>% 
 send() %>% 
 show()
film filmLabel date year
http://www.wikidata.org/entity/Q24340 Anna Karamazoff 1991-01-01 1991
http://www.wikidata.org/entity/Q24515 Shaolin 2011-01-01 2011
http://www.wikidata.org/entity/Q24585 July 14 1932-01-01 1932
http://www.wikidata.org/entity/Q24585 July 14 1933-01-14 1933
http://www.wikidata.org/entity/Q24618 Jaded 1998-01-01 1998

Package glitter: spq_select()

SELECTIONNER les variables renvoyées

Données sur films, localisation narrative, date de sortie ET année de sortie

spq_init() %>%
 spq_add("?film wdt:P31 wd:Q11424", label="?film") %>%   # ?film est une instance de film
 spq_add("?film wdt:P577 ?date") %>%                     # ?film est sorti Ă  la date ?date
 spq_mutate(c("?year"="year(?date)")) %>%                # ?year est l'année correspondant à ?date
 spq_select("-?date") %>%                                # <= on retire la variable ?date
 spq_head(5) %>% 
 send() %>% 
 show()
film filmLabel year
http://www.wikidata.org/entity/Q24340 Anna Karamazoff 1991
http://www.wikidata.org/entity/Q24515 Shaolin 2011
http://www.wikidata.org/entity/Q24585 July 14 1932
http://www.wikidata.org/entity/Q24585 July 14 1933
http://www.wikidata.org/entity/Q24618 Jaded 1998

Package glitter: spq_arrange()

ORDONNER les résultats renvoyés.

Personnes nĂ©es ou habitant Ă  New York qui font l’objet du plus grand nombre d’articles Wikimedia.

spq_init() %>%
  spq_add("?pers wdt:P31 wd:Q5",label="?pers") %>%        # ?pers est une instance de personne
  spq_add("?pers wdt:P19/wdt:P131* wd:Q60") %>%           # qui est née ou est située à New-York
  spq_add("?pers wikibase:sitelinks ?sitelinks") %>%      # ?personne fait l'objet de n liens dans le projet Wikimedia
  spq_arrange(c("desc(?sitelinks)")) %>%                  # <= classe par ordre décroissant de n
  spq_head(n=5) %>%
  send() %>% 
  show()
pers persLabel sitelinks
http://www.wikidata.org/entity/Q22686 Donald Trump 280
http://www.wikidata.org/entity/Q4617 Corbin Bleu 219
http://www.wikidata.org/entity/Q19848 Lady Gaga 178
http://www.wikidata.org/entity/Q33866 Theodore Roosevelt 172
http://www.wikidata.org/entity/Q25089 Woody Allen 150

Package glitter: spq_group_by, spq_summarise()

GROUPER et RESUMER les résultats renvoyés.

Communes d’Auvergne-RhĂŽne-Alpes qui ont Ă©tĂ© supprimĂ©es lors de la rĂ©forme territoriale (nombre par dĂ©partement).

tib=spq_init() %>%
  spq_add("?com wdt:P31 wd:Q21869758") %>%          # ?com est une instance de commune disparue
  spq_add("?com wdt:P131* wd:Q18338206") %>%        # ?com est située en Auvergne-RhÎne-Alpes
  spq_add("?com wdt:P131* ?dep", label="?dep") %>%  # ?com est située dans ?dep
  spq_add("?dep wdt:P31 wd:Q6465") %>%              # ?dep est une instance de département
  spq_group_by(c("?dep", "?depLabel")) %>%          # Groupe par ?dep et ?depLabel
  spq_summarise(c("?ncomsup"="count(?com)")) %>%    # Résume: ?ncomsup = nb de ?com
  send()

tib %>% show()
dep depLabel ncomsup
http://www.wikidata.org/entity/Q12569 Loire 7
http://www.wikidata.org/entity/Q12572 Haute-Loire 2
http://www.wikidata.org/entity/Q12745 Savoie 54
http://www.wikidata.org/entity/Q46130 RhĂŽne 37
http://www.wikidata.org/entity/Q3083 Ain 44
http://www.wikidata.org/entity/Q12751 Haute-Savoie 17
http://www.wikidata.org/entity/Q2236821 RhĂŽne-et-Loire 2
http://www.wikidata.org/entity/Q3113 Allier 5
http://www.wikidata.org/entity/Q3148 ArdĂšche 6
http://www.wikidata.org/entity/Q3259 Cantal 21
http://www.wikidata.org/entity/Q3364 DrĂŽme 8
http://www.wikidata.org/entity/Q12694 Puy-de-DĂŽme 10
http://www.wikidata.org/entity/Q12559 IsĂšre 34
http://www.wikidata.org/entity/Q3120 Jura 4

Package glitter: perfectible pour les requĂȘtes complexes

Certains éléments de syntaxe restent à simplifier


Pour l’instant, beaucoup de longs “strings” inspirĂ©s de SPARQL

spq_filter("contains(lcase(?itemTitle),'wikidata')")

spq_filter("lang(?itemTitle)='en'")

spq_mutate(c("?year"="year(?date)"))

spq_select("-?date")    

spq_arrange(c("desc(?sitelinks)"))

spq_group_by(c("?dep", "?depLabel"))

spq_summarise(c("?ncomsup"="count(?com)"))

Dans l’idĂ©al, une syntaxe qui se rapprocherait le plus possible de:

filter(stringr::str_detect(tolower(itemTitle),"wikidata"))

filter(lang(itemTitle)=="en")

mutate(year=lubridate::year(date))

select(-date)    

arrange(desc(sitelinks))

group_by(dep,depLabel)

summarise(ncomsup=count(com))

GĂ©nĂ©ralisation Ă  l’usage d’autres endpoints

Généralisation : dbpedia

Exemple de requĂȘte sur le SPARQL endpoint de dbpedia:

tib=spq_init() %>% 
  spq_add("?person dbo:birthPlace ?place") %>% # ?personne est née à ?place
  spq_add("?person dbo:profession ?job") %>%   # ?personne a pour profession ?job
  spq_add("?job rdfs:label ?jobLabel") %>%     # ?job a pour étiquette ?jobLabel
  spq_filter(c("LANG(?jobLabel)='en'")) %>%    # Filtre pour ne garder que les étiquettes en anglais
  spq_add("?place rdfs:label 'Lyon'@en") %>%   # ?place a pour étiquette 'Lyon' (en anglais)
  spq_head(10) %>% 
  send("dbpedia")                              # Envoie sur le SPARQL endpoint de DBPEDIA
show(tib)
person place job jobLabel
<http://dbpedia.org/resource/André_Potocki>; <http://dbpedia.org/resource/Lyon>; <http://dbpedia.org/resource/Lawyer>; “
<http://dbpedia.org/resource/Walter_Pilliet>; <http://dbpedia.org/resource/Lyon>; <http://dbpedia.org/resource/Resident_magistrate>; “Resident
<http://dbpedia.org/resource/Stefan_Meller>; <http://dbpedia.org/resource/Lyon>; <http://dbpedia.org/resource/Academician>; “
<http://dbpedia.org/resource/Bernard_Cerquiglini>; <http://dbpedia.org/resource/Lyon>; <http://dbpedia.org/resource/Linguistics>; “
<http://dbpedia.org/resource/Jean-François_Mattei>; <http://dbpedia.org/resource/Lyon>; <http://dbpedia.org/resource/Physician>; “
<http://dbpedia.org/resource/Nora_Berra>; <http://dbpedia.org/resource/Lyon>; <http://dbpedia.org/resource/Physician>; “
<http://dbpedia.org/resource/Delphine_Bagarry>; <http://dbpedia.org/resource/Lyon>; <http://dbpedia.org/resource/Physician>; “
<http://dbpedia.org/resource/Jean-Louis_Touraine>; <http://dbpedia.org/resource/Lyon>; <http://dbpedia.org/resource/Physician>; “
<http://dbpedia.org/resource/Bernard_Accoyer>; <http://dbpedia.org/resource/Lyon>; <http://dbpedia.org/resource/Physician>; “

Généralisation: hal

Exemple de requĂȘte sur le SPARQL endpoint de hal:

query_doc=spq_init() %>% 
  spq_add("haldoc:inria-00362381 dcterms:hasVersion ?version") %>% # Ce doc a des versions ?version
  spq_add("?version dcterms:title ?title") %>%                     # ?version a pour titre ?titre
  spq_add(". dcterms:creator ?creator") %>%                        # ...... et pour créateur ?creator
  spq_add(". ore:aggregates ?pdf") %>%                             # ...... et ce lien vers un ?pdf
  spq_add("?creator hal:person ?person") %>%                       # ?creator est une personne ?person
  spq_add("?person foaf:name ?name")                               # ?person a pour nom ?name

tib_doc=send(query_doc,"hal")

tib_doc
##                                                         version
## 1 <https://data.archives-ouvertes.fr/document/inria-00362381v1>
## 2 <https://data.archives-ouvertes.fr/document/inria-00362381v1>
## 3 <https://data.archives-ouvertes.fr/document/inria-00362381v1>
## 4 <https://data.archives-ouvertes.fr/document/inria-00362381v1>
## 5 <https://data.archives-ouvertes.fr/document/inria-00362381v1>
##                                                              title
## 1 "Querying the Semantic Web of Data using SPARQL, RDF and XML"@en
## 2 "Querying the Semantic Web of Data using SPARQL, RDF and XML"@en
## 3 "Querying the Semantic Web of Data using SPARQL, RDF and XML"@en
## 4 "Querying the Semantic Web of Data using SPARQL, RDF and XML"@en
## 5 "Querying the Semantic Web of Data using SPARQL, RDF and XML"@en
##                      creator
## 1 _:genidnodeID://b614668616
## 2 _:genidnodeID://b614668617
## 3 _:genidnodeID://b614668614
## 4 _:genidnodeID://b614668618
## 5 _:genidnodeID://b614668615
##                                                      pdf
## 1 <https://hal.inria.fr/inria-00362381/file/RR-6847.pdf>
## 2 <https://hal.inria.fr/inria-00362381/file/RR-6847.pdf>
## 3 <https://hal.inria.fr/inria-00362381/file/RR-6847.pdf>
## 4 <https://hal.inria.fr/inria-00362381/file/RR-6847.pdf>
## 5 <https://hal.inria.fr/inria-00362381/file/RR-6847.pdf>
##                                              person                  name
## 1  <https://data.archives-ouvertes.fr/author/62909>         HacĂšne Cherfi
## 2 <https://data.archives-ouvertes.fr/author/827904>         Fabien Gandon
## 3 <https://data.archives-ouvertes.fr/author/720457>         Olivier Corby
## 4 <https://data.archives-ouvertes.fr/author/159177> Khaled Mohamed Khelif
## 5 <https://data.archives-ouvertes.fr/author/327261>     Leila Kefi-Khelif

Généralisation: éléments de simplification

query_doc=spq_init() %>% 
  spq_add("haldoc:inria-00362381 dcterms:hasVersion ?version") %>%
  spq_add("?version dcterms:title ?title") %>%                     
  spq_add(". dcterms:creator ?creator") %>%                        
  spq_add(". ore:aggregates ?pdf") %>%                             
  spq_add("?creator hal:person ?person") %>%                       
  spq_add("?person foaf:name ?name")     
query_doc %>% build_sparql() %>% cat()
## PREFIX foaf: <http://xmlns.com/foaf/0.1/>
## PREFIX dcterms: <http://purl.org/dc/terms/>
## PREFIX ore: <http://www.openarchives.org/ore/terms/>
## PREFIX hal: <http://data.archives-ouvertes.fr/schema/>
## PREFIX haldoc: <https://data.archives-ouvertes.fr/document/>
## SELECT ?version ?title ?creator ?pdf ?person ?name
## WHERE{
## 
## haldoc:inria-00362381 dcterms:hasVersion ?version.
## ?version dcterms:title ?title.
## ?version dcterms:creator ?creator.
## ?version ore:aggregates ?pdf.
## ?creator hal:person ?person.
## ?person foaf:name ?name.
## 
## SERVICE wikibase:label { bd:serviceParam wikibase:language "en".}
## }
tib_doc=send(query_doc,"hal")
tib_doc=send(query_doc,"http://sparql.archives-ouvertes.fr/sparql")

GĂ©nĂ©ralisation: prĂ©fixes “usuels”

show(usual_prefixes)
type name url
Wikidata wd http://www.wikidata.org/entity/
Wikidata wdt http://www.wikidata.org/prop/direct/
Wikidata ps http://www.wikidata.org/prop/statement/
Wikidata pq http://www.wikidata.org/prop/qualifier/
Wikidata wikibase http://wikiba.se/ontology#
dbpedia dbo http://dbpedia.org/ontology/
generic foaf http://xmlns.com/foaf/0.1/
generic rdfs http://www.w3.org/2000/01/rdf-schema#
generic bio http://vocab.org/bio/0.1/
generic dcterms http://purl.org/dc/terms/
generic xsd http://www.w3.org/2001/XMLSchema#
generic isni http://isni.org/ontology#
generic rdarelationships http://rdvocab.info/RDARelationshipsWEMI/
generic owl http://www.w3.org/2002/07/owl#
generic rdf http://www.w3.org/1999/02/22-rdf-syntax-ns#
generic skos http://www.w3.org/2004/02/skos/core#
generic viaf http://viaf.org/viaf/
generic ore http://www.openarchives.org/ore/terms/
generic geo http://www.w3.org/2003/01/geo/wgs84_pos#
generic sioc http://rdfs.org/sioc/ns#
dataBNF bnf-onto http://data.bnf.fr/ontology/bnf-onto/
hal hal http://data.archives-ouvertes.fr/schema/
hal haldoctype https://data.archives-ouvertes.fr/doctype/
hal haldoc https://data.archives-ouvertes.fr/document/

GĂ©nĂ©ralisation: endpoints “usuels”

show(usual_endpoints)
name url
wikidata https://query.wikidata.org/
dbpedia https://dbpedia.org/sparql
databnf https://data.bnf.fr/sparql
isidore https://isidore.science/sparql
hal http://sparql.archives-ouvertes.fr/sparql

Généralisation: tous les endpoints

⚖ DonnĂ©es SIPROJURIS: Le parcours biographique de Gaston,Louis, Henry May (1849 - 1940)

tib=spq_init() %>% 
  spq_prefix(prefixes=c(sym="http://symogih.org/ontology/",         # Préfixe avec sym:
                        syr="http://symogih.org/resource/")) %>%    # Préfixe avec syr:
  spq_add("?tyro rdfs:label ?TyRoLabel") %>% 
  spq_add("?tyin rdfs:label ?TyInLabel") %>% 
  spq_add("?s ?p syr:Actr56241") %>% 
  spq_add(". sym:isComponentOf ?info") %>% 
  spq_add(". sym:hasRoleType ?tyro") %>% 
  spq_add("?info sym:knowledgeUnitStandardLabel ?infoStandardLabel") %>% 
  spq_add(". sym:knowledgeUnitStandardDate ?infoStandardDate") %>% 
  spq_add(". sym:hasKnowledgeUnitType ?tyin") %>% 
  spq_arrange("?infoStandardDate") %>% 
  spq_head(n=10) %>% 
  send(endpoint="http://bhp-publi.ish-lyon.cnrs.fr:8888/sparql")    # Envoie sur le sparql endpoint

show(tib)
tyro TyRoLabel tyin TyInLabel s p info infoStandardLabel infoStandardDate
<http://symogih.org/resource/TyRo40>; naĂźtre <http://symogih.org/resource/TyIn14>; Naissance <http://symogih.org/resource/InRo296950>; <http://symogih.org/ontology/associatesObject>; <http://symogih.org/resource/Info106400>; May, Gaston,Louis, Henry - Naissance Ă  Nancy 1849-12-04
<http://symogih.org/resource/TyRo37>; obtenir <http://symogih.org/resource/TyIn11>; Qualité (obtenir une) <http://symogih.org/resource/InRo329869>; <http://symogih.org/ontology/associatesObject>; <http://symogih.org/resource/Info115919>; May, Gaston,Louis, Henry - Qualité (obtenir une): baccalauréat es lettres 1868
<http://symogih.org/resource/TyRo37>; obtenir <http://symogih.org/resource/TyIn11>; Qualité (obtenir une) <http://symogih.org/resource/InRo329870>; <http://symogih.org/ontology/associatesObject>; <http://symogih.org/resource/Info115920>; May, Gaston,Louis, Henry - Qualité (obtenir une): baccalauréat Ús sciences 1868
<http://symogih.org/resource/TyRo37>; obtenir <http://symogih.org/resource/TyIn11>; Qualité (obtenir une) <http://symogih.org/resource/InRo329871>; <http://symogih.org/ontology/associatesObject>; <http://symogih.org/resource/Info115921>; May, Gaston,Louis, Henry - Qualité (obtenir une): Licencié en droit, par : Faculté de droit de Nancy 1871
<http://symogih.org/resource/TyRo37>; obtenir <http://symogih.org/resource/TyIn11>; Qualité (obtenir une) <http://symogih.org/resource/InRo330004>; <http://symogih.org/ontology/associatesObject>; <http://symogih.org/resource/Info116055>; May, Gaston,Louis, Henry - Qualité (obtenir une): Agrégé des facultés de droit (sans mention de spécialité) 1876
<http://symogih.org/resource/TyRo12>; exercer <http://symogih.org/resource/TyIn97>; Enseignement <http://symogih.org/resource/InRo302511>; <http://symogih.org/ontology/associatesObject>; <http://symogih.org/resource/Info107593>; Chaire d’Etat; May, Gaston,Louis, Henry - Enseigne : ProcĂ©dure civile, auprĂšs de : FacultĂ© de droit de Lille 1876-03-30
<http://symogih.org/resource/TyRo12>; exercer <http://symogih.org/resource/TyIn97>; Enseignement <http://symogih.org/resource/InRo302512>; <http://symogih.org/ontology/associatesObject>; <http://symogih.org/resource/Info107594>; Chaire d’Etat; May, Gaston,Louis, Henry - Enseigne : ProcĂ©dure civile, auprĂšs de : FacultĂ© de droit de Lille 1876-11-04
<http://symogih.org/resource/TyRo12>; exercer <http://symogih.org/resource/TyIn97>; Enseignement <http://symogih.org/resource/InRo302843>; <http://symogih.org/ontology/associatesObject>; <http://symogih.org/resource/Info107598>; Chaire d’Etat; May, Gaston,Louis, Henry - Enseigne : ProcĂ©dure civile, auprĂšs de : FacultĂ© de droit de Nancy 1876-11-04
<http://symogih.org/resource/TyRo189>; Ă©valuer <http://symogih.org/resource/TyIn145>; Passage d’un examen <http://symogih.org/resource/InRo332330>; <http://symogih.org/ontology/associatesObject>; <http://symogih.org/resource/Info116280>; Jacquey, Jules, Joseph - Passage d’un examen 1877
<http://symogih.org/resource/TyRo12>; exercer <http://symogih.org/resource/TyIn97>; Enseignement <http://symogih.org/resource/InRo302513>; <http://symogih.org/ontology/associatesObject>; <http://symogih.org/resource/Info107597>; Cours complémentaire (facultés de droit, XIXe-XXe siÚcles); May, Gaston,Louis, Henry - Enseigne : Pandectes, auprÚs de : Faculté de droit de Nancy 1877-08-17

🙏 Merci pour votre attention!

ANNEXES

Recrutement de Camille Scheffler (stage M2) et exploration des Wikidata pour deux cas d’études: